home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er
/
64ER_CD.iso
/
86xx
/
8605.d64
/
pg-quell 1
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
1995-03-30
|
7KB
|
280 lines
990 OPEN1,4
995 SYS 9*4096
1000 .OPT OO,P1
1005 ;
1010 ;GRAFIKROUTINEN 'PROFI-GRAFIK 64'
1015 ;
1020 *= $8390 ;STARTADRESSE
1025 ;
1030 GETCOM = $AEFD ;PRUEFT AUF KOMMA
1035 GETBYTE = $B79E ;HOLT BYTE INS X-REGISTER
1040 GETADR = $B7EB ;ADRESSWERT NACH $14/$15 + GETBYTE
1045 CHRGET = $0073 ;HOLT NAECHSTES ZEICHEN
1050 CHR(null)T = $0079 ;HOLT LETZTES ZEICHEN
1055 ILLEGAL = $B248 ;FEHLERMELDUNG 'ILLEGAL QUANTITY'
1060 ;
1065 SCRNUM = $9FF1 ;AKTUELLE BILDSCHIRMNUMMER
1070 ;
1075 SCREEN JSR GETBYTE
1080 CPX #2
1085 BCC SCROK
1090 JMP ILLEGAL
1095 SCROK LDA SCRTAB,X
1100 STA SCRNUM ;MERKEN
1105 RTS
1110 ;
1115 SCRTAB .BYT $A0,$E0
1120 ;
1125 HIRES LDA $DD00 ;16K-BEREICH,DEN DER VIC ADRESSIERT
1130 AND #%11111100 ;FESTLEGEN $C000-$FFFF
1135 BIT SCRNUM
1140 BVS *+4 ;BEI $E0 IST DAS V-FLAG GESETZT !
1145 ORA #%00000001 ;BEREICH VON $8000-$BFFF
1150 STA $DD00
1155 LDA $D018 ;POSITION DES VIDEORAMS
1160 ORA #%00101000 ;FESTLEGEN $0C00-$0FFF
1165 STA $D018
1170 JSR TEX1
1175 LDA $D011 ;EINZELPUNKTMODUS EINSCHALTEN
1180 ORA #%00100000 ;BIT5=1
1185 STA $D011
1190 RTS
1195 ;
1200 MULTI JSR HIRES ;HIRES-MODUS EIN
1205 LDA $D016 ;MULTICOLORMODUS EINSCHALTEN
1210 ORA #%00010000 ;BIT4=1
1215 STA $D016
1220 RTS
1225 ;
1230 TEXT LDA $DD00 ;VIC ADRESSIERT JETZT WIEDER
1235 ORA #%00000011 ;BEREICH VON $0000-$3FFF
1240 STA $DD00
1245 LDA $D018 ;VIDEORAM AB $0400-$07FF
1250 AND #%11010111
1255 STA $D018
1260 LDA $D011 ;EINZELPUNKTMODUS ABSCHALTEN
1265 AND #%11011111
1270 STA $D011
1275 TEX1 LDA $D016 ;MULTICOLORMODUS ABSCHALTEN
1280 AND #%11101111
1285 STA $D016
1290 RTS
1295 ;
1300 HELP = $20 ;HILFSZEIGER
1305 ;
1310 CLEAR LDA SCRNUM
1315 STA HELP+1
1320 LDA #0
1325 STA HELP ;ZEIGER AUF ANFANG DER BITMAP
1330 TAY
1335 LDX #32 ;32 BLOECKE = 8 KBYTE
1340 CLOOP STA (HELP),Y ;BYTE LOESCHEN
1345 INY
1350 BNE CLOOP
1355 INC HELP+1 ;NAECHSTER BLOCK
1360 DEX
1365 BNE CLOOP
1370 RTS
1375 ;
1380 HICOL JSR GETBYTE ;ZEICHENFARBE HOLEN
1385 STX HELP ;MERKEN
1390 JSR GETCOM
1395 JSR GETBYTE ;HINTERGRUNDFARBE
1400 STX HELP+1 ;MERKEN
1405 LDA HELP ;ZEICHENFARBE
1410 ASL A
1415 ASL A ;MAL 16
1420 ASL A
1425 ASL A
1430 CLC
1435 ADC HELP+1 ;+ HINTERGRUNDFARBE
1440 JSR HIC1 ;MIT DIESEM WERT VIDEORAM FUELLEN
1445 JSR CHR(null)T
1450 CMP #"," ;WENN NOCH EIN KOMMA FOLGT,
1455 BNE MODE-1
1460 JSR CHRGET
1465 JSR GETBYTE ;DANN 3.ZEICHENFARBE HOLEN
1470 TXA
1475 LDX #$D8 ;UND DAS FARBRAM ($D800-$DFFF)
1480 BNE HIC2 ;DAMIT FUELLEN
1485 ;
1490 HIC1 BIT SCRNUM
1495 BVS SCR1A
1500 LDX #$8C ;SCREEN0 VIDEORAM VON $8C00-$8FFF
1505 .BYT $2C ;BIT-OPCODE
1510 SCR1A LDX #$CC ;SCREEN1 VIDEORAM VON $CC00-$CFFF
1515 HIC2 STX HELP+1
1520 LDY #0
1525 STY HELP ;ZEIGER AUF ANFANG VIDEORAM
1530 LDX #4 ;4 BLOECKE SIND ZU FUELLEN
1535 HLOOP STA (HELP),Y
1540 INY
1545 BNE HLOOP
1550 INC HELP+1 ;NAECHSTER BLOCK
1555 DEX
1560 BNE HLOOP
1565 RTS
1570 ;
1575 PLOTMODE = $9FF2 ;AKTUELLER PLOTMODUS
1580 ;
1585 MODE JSR GETBYTE
1590 CPX #3
1595 BCC MODEOK
1600 ILLMODE JMP ILLEGAL
1605 MODEOK LDA MODETAB,X
1610 STA PLOTMODE ;MODUS MERKEN
1615 RTS
1620 ;
1625 MODETAB .BYT 0,64,128
1630 ;
1635 MULTICOL = $9FF3 ;ZEICHENFARBE FUER MULTI
1640 ;
1645 INK JSR GETBYTE ;ZEICHENFARBE SETZEN
1650 CPX #4
1655 BCS ILLMODE ;>=4, DANN FEHLER
1660 STX MULTICOL ;MERKEN
1665 RTS
1670 ;
1675 XLO = $14
1680 XHI = $15
1685 ;
1690 ;BYTENUMMER ERRECHNEN (HIRES-MODUS)
1695 HIPLOT LSR ;Y-KOORD. SCHON IM AKKU !
1700 LSR ;(Y/8)
1705 LSR
1710 TAY ;INS Y-REGISTER
1715 CLC ;ALLE LOBYTES ADDIEREN
1720 TXA
1725 AND #%00000111 ;(Y AND #7)
1730 ADC MALTAB,Y ;+ (320*Y/8)LO (C=0!)
1735 STA $F7
1740 LDA XLO
1745 AND #%11111000 ;+ (XLO AND #248)
1750 ADC $F7
1755 STA $F7 ;NACH $F7
1760 ;ADDITION DER HIBYTES
1765 LDA MALTAB1,Y ;(320*Y/8)HI
1770 ADC SCRNUM ;+ ANFANG BITMAP
1775 ADC XHI ;+ XHI
1780 STA $F8 ;NACH $F8
1785 LDA XLO ;BITPOSITION ERRECHNEN
1790 AND #%00000111 ;(XLO AND #7)
1795 TAY
1800 LDA HOCHTAB,Y ;2^(7-YREGISTER)
1805 RTS
1810 ;
1815 MUPLOT LSR ;(Y/8)
1820 LSR
1825 LSR
1830 TAY
1835 LDA XLO
1840 AND #%11111100 ;(XLO AND #252)
1845 ASL ;MAL 2 (BIT7 INS CARRY !)
1850 STA $F7 ;NACH $F7
1855 LDA MALTAB1,Y ;(320*Y/8)HI
1860 ADC SCRNUM ;+ANFANG BITMAP
1865 STA $F8 ;NACH $F8
1870 TXA
1875 AND #%00000111 ;(Y AND #7)
1880 ADC MALTAB,Y ;+(320*Y/8)LO
1885 TAY ;INS Y-REGISTER
1890 LDA XLO ;BITPOSITION ERRECHNEN
1895 AND #%00000011 ;(XLO AND #3)
1900 TAX
1905 LDA MULTAB,X ;BITWERT LADEN
1910 SEC
1915 RTS
1920 ;
1925 PLOT JSR GETADR ;KOORDINATEN HOLEN
1930 LDA $D016
1935 AND #%00010000
1940 BNE MPLOT ;MULTICOLORMODUS
1945 CPX #200
1950 BCS PLOT-1 ;YKOORD.>199 (C=1)
1955 LDY XHI
1960 BEQ OK
1965 DEY
1970 BNE PLOT-2 ;XHI>1 (C=1)
1975 LDA XLO ;XHI=1, DANN XLO TESTEN
1980 CMP #<320
1985 BCS PLOT-1 ;XLO>$40 (C=1)
1990 OK SEI
1995 LDA #$34 ;SPEICHER AUF RAM UMSCHALTEN
2000 STA 1 ;UM BIT-MAP LESEN ZU KOENNEN
2005 TXA
2010 PHA ;Y-KOORD. MERKEN
2015 JSR HIPLOT ;BYTENUMMER BERECHNEN
2020 LDY #0
2025 BIT PLOTMODE
2030 BVS LOESCH
2035 BMI INVERT
2040 ORA ($F7),Y ;PUNKT SETZEN
2045 BNE STORE ;UNBEDINGTER SPRUNG
2050 ;
2055 MPLOT CPX #200
2060 BCS PLOT-1
2065 LDA XHI ;XHI<>0 (C=1)
2070 BNE PLOT-2
2075 LDA XLO
2080 CMP #160
2085 BCS PLOT-2 ;XLO>159 (C=1)
2090 SEI
2095 LDA #$34 ;SPEICHER AUF RAM UMSCHALTEN
2100 STA 1
2105 TXA
2110 PHA ;YKOORD. MERKEN
2115 JSR MUPLOT ;BYTENUMMER ERRECHNEN
2120 BIT PLOTMODE
2125 BVS LOESCH
2130 BMI INVERT
2135 PHA ;PUNKT SETZEN
2140 EOR #255 ;VORHER LOESCHEN
2145 AND ($F7),Y
2150 STA ($F7),Y
2155 LDX MULTICOL ;ZEICHENFARBE LADEN
2160 PLA
2165 AND MULTAB1,X ;BITMUSTER DER FARBE SETZEN
2170 ORA ($F7),Y
2175 BNE STORE
2180 LOESCH EOR #255 ;PUNKT LOESCHEN
2185 AND ($F7),Y
2190 .BYT $2C
2195 INVERT EOR ($F7),Y ;PUNKT INVERTIEREN
2200 STORE STA ($F7),Y ;BITMUSTER SETZEN
2205 PLA ;YKOORD. WIEDERHERSTELLEN
2210 TAX
2215 PLOTEND LDA #$37 ;NORMALE SPEICHERKONFIGURATION
2220 STA 1
2225 CLI
2230 CLC ;C=0 WENN PUNKT GESETZT
2235 RTS
2240 ;
2245 MALTAB .BYT 0,<320,<640,<960 ;MULTIPLIKATIONSTABELLE
2250 .BYT $00,$40,$80,$C0 ;MAL 320
2255 .BYT $00,$40,$80,$C0 ;LOBYTES
2260 .BYT $00,$40,$80,$C0
2265 .BYT $00,$40,$80,$C0
2270 .BYT $00,$40,$80,$C0
2275 .BYT $00
2280 ;
2285 MALTAB1 .BYT 0,>320,>640,>960
2290 .BYT $05,$06,$07,$08 ;MAL 320
2295 .BYT $0A,$0B,$0C,$0D ;HIBYTES
2300 .BYT $0F,$10,$11,$12
2305 .BYT $14,$15,$16,$17
2310 .BYT $19,$1A,$1B,$1C
2315 .BYT $1E
2320 ;
2325 HOCHTAB .BYT $80,$40,$20,$10 ;ZWEIERPOTENZEN
2330 .BYT $08,$04,$02,$01
2335 ;
2340 MULTAB .BYT %11000000 ;XPOSITION0
2345 .BYT %00110000 ;XPOSITION1
2350 .BYT %00001100 ;XPOSITION2
2355 .BYT %00000011 ;XPOSITION3
2360 ;
2365 MULTAB1 .BYT %00000000 ;FARBE0=HINTERGRUND
2370 .BYT %01010101 ;FARBE1
2375 .BYT %10101010 ;FARBE2
2380 .BYT %11111111 ;FARBE3